{
 "cells": [
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "['/mnt/tess/astronet/checkpoints/fa1_38_run_1/1/AstroCNNModel_final_alpha_1_20220504_164445',\n",
       " '/mnt/tess/astronet/checkpoints/fa1_38_run_1/2/AstroCNNModel_final_alpha_1_20220504_172032',\n",
       " '/mnt/tess/astronet/checkpoints/fa1_38_run_1/3/AstroCNNModel_final_alpha_1_20220504_175419',\n",
       " '/mnt/tess/astronet/checkpoints/fa1_38_run_1/4/AstroCNNModel_final_alpha_1_20220504_182735',\n",
       " '/mnt/tess/astronet/checkpoints/fa1_38_run_1/5/AstroCNNModel_final_alpha_1_20220504_190055',\n",
       " '/mnt/tess/astronet/checkpoints/fa1_38_run_1/6/AstroCNNModel_final_alpha_1_20220504_193432',\n",
       " '/mnt/tess/astronet/checkpoints/fa1_38_run_1/7/AstroCNNModel_final_alpha_1_20220504_200824',\n",
       " '/mnt/tess/astronet/checkpoints/fa1_38_run_1/8/AstroCNNModel_final_alpha_1_20220504_204203',\n",
       " '/mnt/tess/astronet/checkpoints/fa1_38_run_1/9/AstroCNNModel_final_alpha_1_20220504_211537',\n",
       " '/mnt/tess/astronet/checkpoints/fa1_38_run_1/10/AstroCNNModel_final_alpha_1_20220504_214944']"
      ]
     },
     "execution_count": 1,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "import os\n",
    "\n",
    "chkpt_root = '/mnt/tess/astronet/checkpoints/fa1_38_run_1'\n",
    "data_files = '/mnt/tess/astronet/tfrecords-38-val/*'\n",
    "tces_file = '/mnt/tess/astronet/tces-v14-val.csv'\n",
    "\n",
    "nruns = 10\n",
    "\n",
    "def load_ensemble(chkpt_root, nruns):\n",
    "    checkpts = []\n",
    "    for i in range(nruns):\n",
    "        parent = os.path.join(chkpt_root, str(i + 1))\n",
    "        if not os.path.exists(parent):\n",
    "            break\n",
    "        all_dirs = os.listdir(parent)\n",
    "        if not all_dirs:\n",
    "            break\n",
    "        d, = all_dirs\n",
    "        checkpts.append(os.path.join(parent, d))\n",
    "    return checkpts\n",
    "\n",
    "paths = load_ensemble(chkpt_root, nruns)\n",
    "paths"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {
    "scrolled": false
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Running model 1\n",
      "2491 records\n",
      "Running model 2\n",
      "2491 records\n",
      "Running model 3\n",
      "2491 records\n",
      "Running model 4\n",
      "2491 records\n",
      "Running model 5\n",
      "2491 records\n",
      "Running model 6\n",
      "2491 records\n",
      "Running model 7\n",
      "2491 records\n",
      "Running model 8\n",
      "2491 records\n",
      "Running model 9\n",
      "2491 records\n",
      "Running model 10\n",
      "2491 records\n"
     ]
    }
   ],
   "source": [
    "import getpass\n",
    "import os\n",
    "from astronet import predict\n",
    "import tensorflow as tf\n",
    "\n",
    "\n",
    "def run_predictions(path):\n",
    "    predict.FLAGS = predict.parser.parse_args([\n",
    "      '--model_dir', path,\n",
    "      '--data_files', data_files,\n",
    "      '--output_file', '',\n",
    "    ])\n",
    "\n",
    "    return predict.predict()\n",
    "\n",
    "\n",
    "paths = load_ensemble(chkpt_root, nruns)\n",
    "ensemble_preds = []\n",
    "config = None\n",
    "for i, path in enumerate(paths):\n",
    "    print(f'Running model {i + 1}')\n",
    "    preds, config = run_predictions(path)\n",
    "    ensemble_preds.append(preds.set_index('astro_id'))\n",
    "    print()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 35,
   "metadata": {},
   "outputs": [],
   "source": [
    "labels = ['disp_e', 'disp_n', 'disp_j', 'disp_s', 'disp_b']\n",
    "\n",
    "col_e = labels.index('disp_e')\n",
    "thresh = 0.6"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 36,
   "metadata": {
    "scrolled": false
   },
   "outputs": [],
   "source": [
    "import numpy as np\n",
    "import pandas as pd\n",
    "\n",
    "agg_preds = {}\n",
    "\n",
    "for preds in ensemble_preds:\n",
    "    for ex_id in preds.index:\n",
    "        if ex_id not in agg_preds:\n",
    "            agg_preds[ex_id] = []\n",
    "\n",
    "        row = preds[preds.index == ex_id]\n",
    "        pred_v = row.values[0]\n",
    "        if len(row.values) > 1:\n",
    "            print(f'Warning: duplicate predictions for {ex_id}')\n",
    "        if pred_v[col_e] >= thresh:\n",
    "            agg_preds[ex_id].append('disp_e')\n",
    "        else:\n",
    "            masked_v = [v if i != col_e else 0 for i, v in enumerate(pred_v)]\n",
    "            agg_preds[ex_id].append(preds.columns[np.argmax(masked_v)])"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 37,
   "metadata": {},
   "outputs": [],
   "source": [
    "final_preds = []\n",
    "for ex_id in list(agg_preds.keys()):\n",
    "    counts = {l: 0 for l in labels}\n",
    "    for e in agg_preds[ex_id]:\n",
    "        counts[e] += 1\n",
    "    maxcount = max(counts.values())\n",
    "    counts.update({\n",
    "        'astro_id': ex_id,\n",
    "        'maxcount': maxcount,\n",
    "    })\n",
    "    final_preds.append(counts)\n",
    "    \n",
    "final_preds = pd.DataFrame(final_preds).set_index('astro_id')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 38,
   "metadata": {},
   "outputs": [],
   "source": [
    "tce_table = pd.read_csv(tces_file, header=0, low_memory=False)\n",
    "tce_table['astro_id'] = tce_table['Astro ID']\n",
    "tce_table = tce_table.set_index('astro_id')\n",
    "for l in labels:\n",
    "    tce_table[l] = tce_table[l[:-1] + l[-1].upper()]\n",
    "tce_labels = tce_table[labels + ['TIC ID']]\n",
    "\n",
    "pl = final_preds.join(tce_labels, on='astro_id', how='left', lsuffix='_p')\n",
    "\n",
    "pl.head()\n",
    "pd.set_option('display.max_columns', None)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 39,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Recall: 0.9386973180076629\n",
      "Precision: 0.8596491228070176\n"
     ]
    }
   ],
   "source": [
    "ppos = (pl['disp_e_p'] > 0)\n",
    "pos = (pl['disp_e'] > 0)\n",
    "\n",
    "pneg = (pl['disp_e_p'] == 0)\n",
    "neg = (pl['disp_e'] == 0)\n",
    "\n",
    "print('Recall:', len(pl[ppos & pos]) / len(pl[pos]))\n",
    "print('Precision:', len(pl[ppos & pos]) / len(pl[ppos]))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 40,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "104485403\n",
      "161687311\n",
      "28484801\n",
      "369264198\n",
      "257485503\n",
      "418100760\n",
      "334227600\n",
      "349412074\n",
      "276978548\n",
      "118412801\n",
      "179637565\n",
      "158159741\n",
      "404220255\n",
      "141753278\n",
      "1715064237\n",
      "188768068\n"
     ]
    }
   ],
   "source": [
    "for i in pl[pos & pneg]['TIC ID']:\n",
    "    print(i)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "metadata": {
    "scrolled": true
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "252588526\n",
      "164528404\n",
      "192591652\n",
      "198555242\n",
      "431338538\n",
      "278910035\n",
      "91987762\n",
      "237278147\n",
      "277848886\n",
      "154214348\n",
      "279064110\n",
      "136651206\n",
      "269291226\n",
      "468608862\n",
      "97487520\n",
      "405687343\n",
      "233197293\n",
      "127846210\n",
      "298647682\n",
      "138847344\n",
      "284266496\n",
      "56861756\n",
      "395164445\n",
      "267924099\n",
      "648359612\n",
      "188258751\n",
      "101496204\n",
      "122577745\n",
      "241855882\n",
      "335588842\n",
      "842068824\n",
      "356822358\n",
      "275431073\n",
      "18178958\n",
      "165500081\n",
      "408945155\n",
      "219880693\n",
      "356776209\n",
      "278555119\n",
      "27896467\n",
      "375927073\n",
      "14209654\n",
      "417208086\n",
      "135171752\n",
      "154271808\n",
      "1400086045\n",
      "159636125\n",
      "230197530\n",
      "320356995\n",
      "30407196\n",
      "404851508\n",
      "407615704\n",
      "167039826\n",
      "201601338\n",
      "30275847\n",
      "404851966\n",
      "384341508\n",
      "302968162\n",
      "113496703\n",
      "309650507\n",
      "22892207\n",
      "406971913\n",
      "276738707\n",
      "373919592\n",
      "446698252\n",
      "167809450\n",
      "40602499\n",
      "404851552\n",
      "319865847\n",
      "183978683\n",
      "326693475\n",
      "293527927\n",
      "363404187\n",
      "311103813\n",
      "300153494\n",
      "404733023\n",
      "406091286\n",
      "278413697\n",
      "281578420\n",
      "118398402\n",
      "410087746\n",
      "199376584\n"
     ]
    }
   ],
   "source": [
    "for i in pl[neg & ppos]['TIC ID']:\n",
    "    print(i)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 16,
   "metadata": {
    "scrolled": true
   },
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>disp_e</th>\n",
       "      <th>disp_n</th>\n",
       "      <th>disp_j</th>\n",
       "      <th>disp_s</th>\n",
       "      <th>disp_b</th>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>astro_id</th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>2919</th>\n",
       "      <td>0.000497</td>\n",
       "      <td>0.023041</td>\n",
       "      <td>0.996871</td>\n",
       "      <td>0.010173</td>\n",
       "      <td>0.001959</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2919</th>\n",
       "      <td>0.005764</td>\n",
       "      <td>0.024955</td>\n",
       "      <td>0.948721</td>\n",
       "      <td>0.093139</td>\n",
       "      <td>0.002399</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2919</th>\n",
       "      <td>0.001759</td>\n",
       "      <td>0.027560</td>\n",
       "      <td>0.980165</td>\n",
       "      <td>0.041605</td>\n",
       "      <td>0.002284</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2919</th>\n",
       "      <td>0.000611</td>\n",
       "      <td>0.021570</td>\n",
       "      <td>0.997332</td>\n",
       "      <td>0.004780</td>\n",
       "      <td>0.001611</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2919</th>\n",
       "      <td>0.003743</td>\n",
       "      <td>0.038888</td>\n",
       "      <td>0.990707</td>\n",
       "      <td>0.008697</td>\n",
       "      <td>0.002172</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2919</th>\n",
       "      <td>0.000897</td>\n",
       "      <td>0.017680</td>\n",
       "      <td>0.995467</td>\n",
       "      <td>0.006299</td>\n",
       "      <td>0.001214</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2919</th>\n",
       "      <td>0.012977</td>\n",
       "      <td>0.040268</td>\n",
       "      <td>0.914150</td>\n",
       "      <td>0.104075</td>\n",
       "      <td>0.007858</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2919</th>\n",
       "      <td>0.003459</td>\n",
       "      <td>0.035027</td>\n",
       "      <td>0.980079</td>\n",
       "      <td>0.046869</td>\n",
       "      <td>0.003260</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2919</th>\n",
       "      <td>0.004241</td>\n",
       "      <td>0.028279</td>\n",
       "      <td>0.980136</td>\n",
       "      <td>0.019056</td>\n",
       "      <td>0.003319</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2919</th>\n",
       "      <td>0.000345</td>\n",
       "      <td>0.021613</td>\n",
       "      <td>0.997836</td>\n",
       "      <td>0.003403</td>\n",
       "      <td>0.001366</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "            disp_e    disp_n    disp_j    disp_s    disp_b\n",
       "astro_id                                                  \n",
       "2919      0.000497  0.023041  0.996871  0.010173  0.001959\n",
       "2919      0.005764  0.024955  0.948721  0.093139  0.002399\n",
       "2919      0.001759  0.027560  0.980165  0.041605  0.002284\n",
       "2919      0.000611  0.021570  0.997332  0.004780  0.001611\n",
       "2919      0.003743  0.038888  0.990707  0.008697  0.002172\n",
       "2919      0.000897  0.017680  0.995467  0.006299  0.001214\n",
       "2919      0.012977  0.040268  0.914150  0.104075  0.007858\n",
       "2919      0.003459  0.035027  0.980079  0.046869  0.003260\n",
       "2919      0.004241  0.028279  0.980136  0.019056  0.003319\n",
       "2919      0.000345  0.021613  0.997836  0.003403  0.001366"
      ]
     },
     "execution_count": 16,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "def compare(ensemble_preds, filter):\n",
    "    result = ensemble_preds[0][filter]\n",
    "    for preds in ensemble_preds[1:]:\n",
    "        result = result.append(preds[filter])\n",
    "    return result\n",
    "\n",
    "compare(ensemble_preds, preds.index == pl[pl['TIC ID'] == 118412801].index.values[0])"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 11,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>disp_e_p</th>\n",
       "      <th>disp_n_p</th>\n",
       "      <th>disp_j_p</th>\n",
       "      <th>disp_s_p</th>\n",
       "      <th>disp_b_p</th>\n",
       "      <th>maxcount</th>\n",
       "      <th>disp_e</th>\n",
       "      <th>disp_n</th>\n",
       "      <th>disp_j</th>\n",
       "      <th>disp_s</th>\n",
       "      <th>disp_b</th>\n",
       "      <th>TIC ID</th>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>astro_id</th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>26515</th>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>10</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>10</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>5</td>\n",
       "      <td>0</td>\n",
       "      <td>2</td>\n",
       "      <td>1254504863</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "          disp_e_p  disp_n_p  disp_j_p  disp_s_p  disp_b_p  maxcount  disp_e  \\\n",
       "astro_id                                                                       \n",
       "26515            0         0        10         0         0        10       0   \n",
       "\n",
       "          disp_n  disp_j  disp_s  disp_b      TIC ID  \n",
       "astro_id                                              \n",
       "26515          0       5       0       2  1254504863  "
      ]
     },
     "execution_count": 11,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "pl[pl.index == pl[pl['TIC ID'] == 1254504863].index.values[0]]"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### PR curve"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 12,
   "metadata": {},
   "outputs": [],
   "source": [
    "ids = set(ensemble_preds[0].index.values)\n",
    "\n",
    "index = {v: i for i, v in enumerate(ids)}\n",
    "\n",
    "pred_es = np.zeros([len(ensemble_preds), len(index)])\n",
    "for i, preds in enumerate(ensemble_preds):\n",
    "    for row in preds.iterrows():\n",
    "        ex_id, pred_e = row[0], row[1][col_e]\n",
    "        pred_es[i][index[ex_id]] = pred_e\n",
    "\n",
    "lbl_es = np.zeros([len(index)], dtype=np.bool)\n",
    "for row in tce_labels.iterrows():\n",
    "    ex_id, lbl_e = row[0], row[1]['disp_e']\n",
    "    lbl_es[index[ex_id]] = (lbl_e > 0)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 13,
   "metadata": {},
   "outputs": [],
   "source": [
    "num_cond_pos = int(np.sum(lbl_es))\n",
    "\n",
    "def pr_at_th(th):\n",
    "    pred_pos = np.any(pred_es >= th, axis=0)\n",
    "    true_pos = pred_pos & lbl_es\n",
    "    num_pred_pos = int(np.sum(pred_pos))\n",
    "    num_true_pos = int(np.sum(true_pos))\n",
    "    if num_pred_pos == 0:\n",
    "        return 1.0, 0.0\n",
    "    return float(num_true_pos) / float(num_pred_pos), float(num_true_pos) / float(num_cond_pos)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 14,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "AUC: 0.9670730933258337, max R: 1.0, max P: 1.0\n",
      "100% recall at: 38%, threshold: 0.008498748302514292\n"
     ]
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 1200x740 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "from matplotlib import pyplot as plt\n",
    "\n",
    "ps, rs, ths = ([], [], [])\n",
    "th = np.max(pred_es)\n",
    "while th >= 0.0:\n",
    "    p, r = pr_at_th(th)\n",
    "    ps.append(p)\n",
    "    rs.append(r)\n",
    "    ths.append(th)\n",
    "    th -= 0.0005\n",
    "    \n",
    "from sklearn import metrics\n",
    "\n",
    "print(f'AUC: {metrics.auc(rs, ps)}, max R: {max(rs)}, max P: {max(ps)}')\n",
    "    \n",
    "i = len(rs) - 1\n",
    "while rs[i] == 1.0:\n",
    "    i -= 1\n",
    "i += 1\n",
    "print(f'100% recall at: {int(ps[i] * 100)}%, threshold: {ths[i]}')\n",
    "\n",
    "fig, ax = plt.subplots(figsize=(6, 3.7), dpi=200)\n",
    "\n",
    "ax.spines['top'].set_color('#808080')\n",
    "ax.spines['right'].set_color('#808080')\n",
    "ax.spines['left'].set_color('#808080')\n",
    "ax.spines['bottom'].set_color('#808080')\n",
    "ax.tick_params(direction='in', color='#808080')\n",
    "\n",
    "plt.grid(color='#c0c0c0', linestyle='--', linewidth=0.5)\n",
    "\n",
    "plt.ylabel('Precision', fontweight='bold')\n",
    "plt.xlabel('Recall', fontweight='bold')\n",
    "\n",
    "plt.xlim((0.0, 1.0))\n",
    "plt.ylim((0.0, 1.0))\n",
    "\n",
    "_ = plt.plot(rs, ps)"
   ]
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.7.6"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 4
}
